package com.example.sdk_test_demo;

import com.mchsdk.open.AnnounceTimeCallBack;
//import com.example.sdk_test_demo.test.TestProcess;
import com.mchsdk.open.GPExitResult;
import com.mchsdk.open.GPSDKInitResult;
import com.mchsdk.open.GPUserResult;
import com.mchsdk.open.IGPExitObsv;
import com.mchsdk.open.IGPSDKInitObsv;
import com.mchsdk.open.IGPUserObsv;
import com.mchsdk.open.MCApiFactory;
import com.mchsdk.open.OrderInfo;
import com.mchsdk.open.PayCallback;
import com.mchsdk.open.UploadRoleCallBack;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
import app.webchat.payments.agree.R;

public class MainActivity extends Activity {
	
	private static final String TAG ="MainActivity";
	Activity activity;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sdk_main);
		activity = this;
		initView();
		initData();
	}

	private void initView() {
		
		findViewById(R.id.btnPay).setOnClickListener(myOnlickListener);
		
		if (MCApiFactory.getMCApi().isLogin()) {
		
			findViewById(R.id.btnPay).setVisibility(View.VISIBLE);
			
			findViewById(R.id.money).setVisibility(View.VISIBLE);
		} else {
			findViewById(R.id.btnPay).setVisibility(View.GONE);
			findViewById(R.id.money).setVisibility(View.GONE);
		}
		findViewById(R.id.btnExit).setOnClickListener(myOnlickListener);
		findViewById(R.id.login).setOnClickListener(myOnlickListener);
		findViewById(R.id.btn_setTestParams).setOnClickListener(
				myOnlickListener);
		findViewById(R.id.btn_upLoadRole).setOnClickListener(myOnlickListener);
	}

	private void initData() {
	    // 第一个参数和第二个参数：渠道id和渠道名称，一般联运不会特殊要求，这里填写固定值“0”和“自然注册”即可
        //第三、第四、第五个参数分别为： 游戏id、游戏名称、游戏appid，一般联运会要求填写对应游戏的真实参数以方便在联运后台区分对接是否成功
        // 第六、第七个参数：访问秘钥和联运SDK服务器地址联运提供
		MCApiFactory.getMCApi().setParams("0", // 渠道id
                "自然注册",// 渠道名称
                "18", // 游戏id(编号)
                "开心斗地主(安卓版)",// 游戏名称
                "37945C37B2B4970DD"// 游戏appid
                , "CgsPEgsLEg8LCg==",// 访问秘钥： (SDK访问服务器时的加密key)
                "http://ceshisy.vlcms.com/sdk.php/");// 联运SDK服务器地址
		
		// 2.初始化方法
		MCApiFactory.getMCApi().init(activity, false);
		
		
		/** 3. 个人中心里面点击退出登录执行的退出回调接口,根据实际需要选择 **/
		MCApiFactory.getMCApi().initExitFromPersonInfoParams(mExitObsvPerson);
		/** 设置测试 打包参数 ，设置以后，如果apk没有在平台打包，sdk会调用这里面设置的参数 */
		/** 渠道信息优先级，真实打包 > 这里填写的测试信息 > 联运后台设置的默认参数> sdk里面的测试参数 */
	}

	/**
	 * 个人中心退出方法回调，这个接口现在用不到了
	 */
	private IGPExitObsv mExitObsvPerson = new IGPExitObsv() {

		@Override
		public void onExitFinish(GPExitResult gpExitResult) {
			switch (gpExitResult.mResultCode) {
			case GPExitResult.GPSDKResultCodeOfPersonInfo:
				writeLog("个人中心的退出帐号的回调");
				break;
			default:
				break;
			}
		}
	};
	
	/** * 退出界面回调接口 */
	private IGPExitObsv mExitObsv = new IGPExitObsv() {
		@Override
		public void onExitFinish(GPExitResult exitResult) {
			switch (exitResult.mResultCode) {
			case GPExitResult.GPSDKExitResultCodeExitGame:
				writeLog("退出回调:退出方法回调");
				// 关闭悬浮窗
				MCApiFactory.getMCApi().stopFloating(activity);
				// 下面是退出逻辑,解决退出之后微信还在的问题
				Intent MyIntent = new Intent(Intent.ACTION_MAIN);
				MyIntent.addCategory(Intent.CATEGORY_HOME);
				startActivity(MyIntent);
				
				 // 你自己的退出逻辑，退出程序
//                finish();
//                System.exit(0);
				break;
			default:
				break;
			}
		}
	};
	
	OnClickListener myOnlickListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btnPay:
				int money = 1;
				String productPrice = ((TextView) findViewById(R.id.money)).getText()
						.toString().trim();
				
				if (!TextUtils.isEmpty(productPrice)) {
					if(productPrice.length()<7){
						money = Integer.parseInt(productPrice);
					}else{
						money = Integer.parseInt(productPrice.substring(0,6));
					}
				}
			    OrderInfo order = new OrderInfo();
                order.setProductName("灭世者的死亡之帽");// 物品名称
                order.setProductDesc("物品描述"); // 物品描述
                order.setAmount(money);//商品价格（单位分）
                order.setExtendInfo("这里是透传参数"); // 用于确认交易给玩家发送商品
                order.setServerName("德玛西亚");
                order.setRoleName("对面的坑货你别怂");
//			    order.setGameServerId("12");//游戏区服ID
                MCApiFactory.getMCApi().pay(MainActivity.this, order, payCallback);
				break;
			case R.id.login:
				//调用登录接口
                MCApiFactory.getMCApi().startlogin(MainActivity.this, mUserObsv);
				break;
		    case R.id.btn_setTestParams:
//		    	startActivity(new Intent(getApplicationContext(),
//						TestActivity.class));
		    	break;
		    case R.id.btnExit:
		    	MCApiFactory.getMCApi().exitDialog(MainActivity.this, mExitObsv);
		    	break;
		    	 //上传角色
		    case R.id.btn_upLoadRole:
		    	//context,游戏id，服务器id，服务器名称，角色名称，角色等级，回掉
		    	   MCApiFactory.getMCApi().uploadRole(MainActivity.this, "117", "1", "德玛西亚",
	                        "对面的坑货你别怂", "27", uploadRoleCallBack);
		    	break;
			}
		}
	};
	

    /**
     * 上传角色回调
     * 1：成功 ，其他为失败
     */
    private UploadRoleCallBack uploadRoleCallBack = new UploadRoleCallBack() {
        @Override
        public void onUploadComplete(String result) {
            Log.i(TAG, "上传角色回调: " + result);
            if ("1".equals(result)) {
                Toast.makeText(MainActivity.this, "上传角色成功", Toast.LENGTH_SHORT).show();
            }
        }
    };
	
	/** * 登录回调接口 */
	private IGPUserObsv mUserObsv = new IGPUserObsv() {
		@Override
		public void onFinish(GPUserResult result) {
			switch (result.getmErrCode()) {
			case GPUserResult.USER_RESULT_LOGIN_FAIL:
				writeLog("登录回调:登录失败");
				break;
			case GPUserResult.USER_RESULT_LOGIN_SUCC:
				findViewById(R.id.btnPay).setVisibility(View.VISIBLE);
				findViewById(R.id.money).setVisibility(View.VISIBLE);
				MCApiFactory.getMCApi().startFloating(activity);
				String uid = result.getAccountNo();// 登录用户id
				String token = result.getToken();
				result.getAccount();
				System.out.println("userid = " + uid);
				System.out.println("token = " + token);
				// 将这里返回的用户id和token返回给cp服务器，cp服务器发送给sdk服务器验证登录结果
				
				// 以下代码模拟服cp服务器访问sdk服务器登录验证,这个验证需要写在cp服务器
//				TestProcess process = new TestProcess();
//				process.token = token;
//				process.user_id = uid;
//				process.post(new Handler());
				
				//设置防沉迷回调
//              MCApiFactory.getMCApi().initAnnounceTimeCallBack(announceTimeCallBack);
				break;
			}
		}
	};
	  /**
     * 支付结果回调
     */
    private PayCallback payCallback = new PayCallback() {
        @Override
        public void callback(String errorcode) {
            if (TextUtils.isEmpty(errorcode)) {
                return;
            }
            Log.w(TAG,errorcode);
            if ("0".equals(errorcode)) {
                Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_LONG).show();
            } else if ("1".equals(errorcode)) {
                //可以当做支付成功
                Toast.makeText(MainActivity.this, "支付宝支付正在确认", Toast.LENGTH_LONG).show();
            } else if ("2".equals(errorcode)) {
                Toast.makeText(MainActivity.this, "支付宝支付未获取到支付结果", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_LONG).show();
            }
        }
    };

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
            MCApiFactory.getMCApi().exitDialog(MainActivity.this, mExitObsv);
        }
        return super.onKeyDown(keyCode, event);
    }
	
	public static void writeLog(String msg) {
		Log.e(TAG, msg);
	}

	public void showToast(String str) {
		Toast.makeText(activity, str, Toast.LENGTH_SHORT).show();
	};
	
    /**
     * 防沉迷时间回掉
     */
    private AnnounceTimeCallBack announceTimeCallBack = new AnnounceTimeCallBack() {
        @Override
        public void callback(String result) {
            Log.i(TAG, "result: " + result);
            if (TextUtils.isEmpty(result)) {
                return;
            }
            if ("1".equals(result)) {
                //第一次到时通知
                Log.i(TAG, "第一次到时通知");
//                Toast.makeText(MainActivity.this, "第一次到时通知", Toast.LENGTH_LONG).show();
            }
            if ("2".equals(result)) {

                //第二次到时通知,玩家进入疲劳游戏时间
                Log.i(TAG, "第二次到时通知");
//                Toast.makeText(MainActivity.this, "第二次到时通知", Toast.LENGTH_LONG).show();
            }
            if ("3".equals(result)) {
//                Toast.makeText(MainActivity.this, "时间到，停止计时。", Toast.LENGTH_LONG).show();
                Log.e(TAG,"时间到，停止计时。");
            }
        }
    };
    
    /**
     *游戏从后台开始，开始计时
     */
    @Override
    protected void onResume() {
        super.onResume();
        //操作悬浮窗
        MCApiFactory.getMCApi().startFloating(MainActivity.this);
        MCApiFactory.getMCApi().onResume();
    }


    /**
     * 游戏进入后台或退出游戏时，请求下线（下线通知）
     */
    @Override
    protected void onStop() {
        super.onStop();
        MCApiFactory.getMCApi().stopFloating(MainActivity.this);
        MCApiFactory.getMCApi().onStop(MainActivity.this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        MCApiFactory.getMCApi().stopFloating(MainActivity.this);
    }

}
